package nextfm.bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import nextfm.dao.DAOAlbum;
import nextfm.dao.DAOCategoria;
import nextfm.dao.DAOMusica;
import nextfm.model.Album;
import nextfm.model.Categoria;
import nextfm.model.Musica;

public class MusicaBean {
	
	DAOMusica daoMusica = new DAOMusica();
	DAOCategoria daoCategoria = new DAOCategoria();
	DAOAlbum daoAlbum = new DAOAlbum();
	List<SelectItem> albuns = new ArrayList<SelectItem>();
	List<SelectItem> categorias = new ArrayList<SelectItem>();
	int id;
	int idCategoriaSelecionada;
	int idAlbumSelecionado;
	String nome;
	String diretorio;
	Musica musicaSelecionada;
	List<Musica> musicas = daoMusica.findAll();
	int scrollerPage = 1;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	public int getIdCategoriaSelecionada() {
		return idCategoriaSelecionada;
	}

	public void setIdCategoriaSelecionada(int idCategoriaSelecionada) {
		this.idCategoriaSelecionada = idCategoriaSelecionada;
	}

	public int getIdAlbumSelecionado() {
		return idAlbumSelecionado;
	}

	public void setIdAlbumSelecionado(int idAlbumSelecionado) {
		this.idAlbumSelecionado = idAlbumSelecionado;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDiretorio() {
		return diretorio;
	}

	public void setDiretorio(String diretorio) {
		this.diretorio = diretorio;
	}

	public List<SelectItem> getAlbuns() {
		List<Album> todosAlbuns = daoAlbum.findAll();
		
		if (albuns.size() == 0) {
		
			for (Album album : todosAlbuns) {
				albuns.add(new SelectItem(album.getId(), album.getNome()));
			}
		
		}
		
		return albuns;
	}

	public void setAlbuns(List<SelectItem> albuns) {
		this.albuns = albuns;
	}

	public List<SelectItem> getCategorias() {
		List<Categoria> todasCategorias = daoCategoria.findAll();
		
		if (categorias.size() == 0) {
		
			for (Categoria categoria : todasCategorias) {
				categorias.add(new SelectItem(categoria.getId(), categoria.getNome()));
			}
		
		}
		return categorias;
	}

	public void setCategorias(List<SelectItem> categorias) {
		this.categorias = categorias;
	}
	
	public Musica getMusicaSelecionada() {
		return musicaSelecionada;
	}

	public void setMusicaSelecionada(Musica musicaSelecionada) {
		this.musicaSelecionada = musicaSelecionada;
	}

	public List<Musica> getMusicas() {
		return musicas;
	}

	public void setMusicas(List<Musica> musicas) {
		this.musicas = musicas;
	}

	public int getScrollerPage() {
		return scrollerPage;
	}

	public void setScrollerPage(int scrollerPage) {
		this.scrollerPage = scrollerPage;
	}

	public String remover() {
		try {
			System.out.println("Removendo música de id" + getId());
			Musica musica = daoMusica.find(getId());
			daoMusica.begin();
			daoMusica.remove(musica);
			daoMusica.commit();
			return "success";
		}
		
		catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}
	}
	
	public String editar() {

		try {
			Musica musica = daoMusica.find(getId());
			musica.setNome(getNome());
			musica.setDiretorio(getDiretorio());
			Album album = daoAlbum.find(getIdAlbumSelecionado());
			Categoria categoria = daoCategoria.find(getIdCategoriaSelecionada());
			musica.setAlbum(album);
			musica.setCategoria(categoria);
			System.out.println("Editando música de id " + getId());
			daoMusica.begin();
			daoMusica.merge(musica);
			daoMusica.commit();
			if (!album.getMusicas().contains(musica)) {
				album.getMusicas().add(musica);
			}
			if (!categoria.getMusicas().contains(musica)) {
				categoria.getMusicas().add(musica);
			}
			daoAlbum.begin();
			daoAlbum.merge(album);
			daoAlbum.commit();
			daoCategoria.begin();
			daoCategoria.merge(categoria);
			daoCategoria.commit();
			return "success";
		}

		catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}

	}
	
	public String cadastrar() {
		try {
			System.out.println("Adicionando musica " + getNome());
			Musica musica = new Musica(getNome(), getDiretorio());
			Album album = daoAlbum.find(getIdAlbumSelecionado());
			Categoria categoria = daoCategoria.find(getIdCategoriaSelecionada());
			album.getMusicas().add(musica);
			musica.setAlbum(album);
			categoria.getMusicas().add(musica);
			musica.setCategoria(categoria);
			daoMusica.begin();
			daoMusica.persist(musica);
			daoAlbum.merge(album);
			daoCategoria.merge(categoria);
			daoAlbum.commit();
			return "success";
		}
		
		catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}
		
	}
	
	public void selecionarMusica(ActionEvent evento){  
		UIParameter component = (UIParameter) evento.getComponent().findComponent("codigoEdicao");  
		int codigo = Integer.parseInt(component.getValue().toString());   
		setMusicaSelecionada(daoMusica.find(codigo));
		setDiretorio(musicaSelecionada.getDiretorio());
		setNome(musicaSelecionada.getNome());
		setIdAlbumSelecionado(musicaSelecionada.getAlbum().getId());
		setIdCategoriaSelecionada(musicaSelecionada.getCategoria().getId());
		setId(codigo);
	}
	
}
